import api from "../utils/api.js";

/**
 * url 请求地址
 * start 分页的起始位置，不传则不分页
 * param 参数对象
 * contentType="application/x-www-form-urlencoded"
 * contentType="application/json"
 */
function getJson(url, data = {}, contentType = "application/x-www-form-urlencoded") {
    return _request("GET", url, data, true, contentType);
}

/**
 * url 请求地址
 * start 分页的起始位置，不传则不分页
 * param 参数对象
 */
function postJson(url, data = {}, contentType = "application/json") {
    return _request("POST", url, data, true, contentType);
}

/**
 * url 请求地址
 * start 分页的起始位置，不传则不分页
 * param 参数对象
 * contentType="application/x-www-form-urlencoded"
 * contentType="application/json"
 */
function putJson(url, data = {}, contentType = "application/json") {
    return _request("PUT", url, data, true, contentType);
}

/**
 * url 请求地址
 * start 分页的起始位置，不传则不分页
 * param 参数对象
 */
function delJson(url, data = {}, contentType = "application/x-www-form-urlencoded") {
    return _request("DELETE", url, data, true, contentType);
}

/**
 * url 请求地址
 * start 分页的起始位置，不传则不分页
 * param 参数对象
 * 无加载进度
 */
function getJsonUnLoadding(url, data = {}, contentType = "application/json") {
    return _request("GET", url, data, false, contentType);
}

/**
 * url 请求地址
 * start 分页的起始位置，不传则不分页
 * param 参数对象
 * 无加载进度
 */
function postJsonUnLoadding(url, data = {}, contentType = "application/json") {
    return _request("POST", url, data, false, contentType);
}


/**
 * that 页面指针
 * url 请求地址
 * method POST GET
 * data 求请参数
 */
function _request(method, url, data, isLoadding = true, contentType) {
    if (isLoadding) {
        wx.showLoading();
    }
    // const app = getApp();
    //   if (app.globalData.userInfo) {
    //     data.userId = app.globalData.userInfo.id;
    //     // data.userId = "1579091431870103553";
    //   }
    //   if (app.globalData.openId) {
    //     data.openid = app.globalData.openId;
    //   }
    if (method == "GET" || method == "PUT") {
        contentType = 'application/x-www-form-urlencoded';
    }
    return new Promise((resolve, reject) => wx.request({
        url: _getUrl() + url,
        header: {
            'content-type': contentType
            // 'content-type': 'application/json',
            // 'content-type': 'application/x-www-form-urlencoded'
        },
        method: method,
        data: data,
        success: function (res) {
            wx.hideLoading();
            // status 1=正常，-1=token失效， 0=错误（这种错误不给用户看到），2=错误（这种错误需要用户能看到，比喻密码错误、账号不存等
            console.log(res);
            if (res.data.code == 0 || res.data.code == 200) {
                let result = res.data.data;
                if (typeof result === "string") {
                    try {
                        result = JSON.parse(result);
                        if (result.code == 201) {
                            wx.showToast({
                                icon: 'none',
                                title: result.msg
                            })
                        } else {
                            resolve(result);
                        }
                    } catch (e) {
                        resolve(res.data);
                    }
                } else {
                    resolve(res.data);
                }
            } else if (res.data.code == 201) {
                wx.showToast({
                    icon: 'none',
                    title: res.data.msg
                })
            } else {
                // reject(res)
                console.log(res);
            }
        },
        fail: function (res) {
            wx.hideLoading();
            reject(res)
            console.log(res);
        },
        complete: function (e) {
            if (getApp().globalData.debug) {
                console.log('接口：', url)
                console.log('参数：', data)
                console.log('方法：', method)
                console.log('结果：', e.data.data)
                console.log('信息：', e.data.msg)
            }
            wx.stopPullDownRefresh();
        }
    }));
}

/**
 * that 页面指针
 * file 文件key
 * name 文件key
 * data 求请参数
 * 选择本地文件上传
 */
function uploadFile(file, name, data) {
    wx.showLoading();
    return new Promise((resolve, reject) => wx.uploadFile({
        url: _getUrl() + api.upload,
        filePath: file,
        name: name,
        formData: data,
        success: function (res) {
            console.log(res)
            let imgUrl = JSON.parse(res.data).data;
            console.log(imgUrl)
            resolve(imgUrl);
        },
        fail: function (res) {
            reject(res)
            console.log(res);
        },
        complete: function () {
            wx.hideLoading();
        },
    }))
}

function _getUrl() {
    let url = getApp().globalData.debug ? api.debugUrl : api.url;
    return url;
}

function getImgUrl() {
    let url = getApp().globalData.debug ? api.debugUrl : api.url;
    return url + api.imgUrl;
}



module.exports = {
    getJson,
    postJson,
    putJson,
    delJson,
    getJsonUnLoadding,
    postJsonUnLoadding,
    uploadFile,
    getImgUrl
}